package cn.etg.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*
Annotation 注解
注解：代码里的特殊标记，这些标记可以在编译，类加载，运行时读取，并执行应用的处理。

注解可以像修饰符一样被使用，用在包，类，构造器，方法，变量等等
注解也可以替代冗余代码和XML配置
基于注解版的框架= 注解+反射+设计模式   例如：spring框架

如何定义注解
1.注解声明为@interface
2.内部定义成员，通常使用value表示
3.可以指定成员的默认值，使用default定义
4.如果自定义注解没有成员，表明这个注解就是一个标识的作用

元注解：用来定义注解的注解
常用4中元注解
1.Retention:只能修饰注解，用来定义注解的生命周期。注解中有个RetentionPolicy
的属性，该属性的属性值表示注解的生命周期
RetentionPolicy.SOURCE:源文件有效，编译器直接丢弃这个策略
RetentionPolicy.CLASS:在class时有效，当Java运行时，JVM不保留注解，这是默认值
RetentionPolicy.RUNTIME：在运行时有效，当Java运行时，JVM保留注解，程序通过
反射获得注解。
2.Target：用于修饰注解的定义，用于指定被修饰的注解能用于修饰哪些成员的元素(注解用在哪)
3.Document：文档注解，在javac工具提取文档有效
4.Inherited：它被修饰的注解将具有继承性，如果某个类使用了呗@Inherited修饰的注解，
子类将自动具有该注解。


 */
// 创建注解 controller
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Controller {
}
